// 社区模块的 Vuex Store
const state = {
  // 讨论帖子数据
  discussions: {
    1: {
      id: 1,
      title: '高中数学必修三概率统计学习心得',
      content: '最近在学习概率统计，发现条件概率和全概率公式特别容易混淆，有没有什么好的记忆方法？我总结了一些自己的理解，希望能和大家交流...',
      author: {
        id: 101,
        name: '张同学',
        avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png'
      },
      createTime: '2023-06-15 14:30',
      updateTime: '2023-06-15 14:30',
      views: 256,
      likes: 45,
      comments: [
        {
          id: 1001,
          content: '我觉得条件概率最重要的是理解它的定义，就是在B事件发生的条件下A事件发生的概率。可以用韦恩图来辅助记忆，条件概率就是交集除以B的概率。',
          author: {
            id: 102,
            name: '李同学',
            avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png'
          },
          createTime: '2023-06-15 15:20',
          likes: 12
        },
        {
          id: 1002,
          content: '我推荐你看看《概率论与数理统计》这本书，里面的例题很有代表性，对理解概念很有帮助。',
          author: {
            id: 103,
            name: '王老师',
            avatar: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png'
          },
          createTime: '2023-06-15 16:45',
          likes: 8
        }
      ],
      tags: ['数学', '概率统计', '学习心得']
    },
    2: {
      id: 2,
      title: '物理力学问题求解技巧分享',
      content: '在解决力学问题时，我发现先画受力分析图非常重要。此外，选择合适的坐标系也能大大简化计算过程。下面分享几个我在学习中总结的技巧...',
      author: {
        id: 104,
        name: '刘同学',
        avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png'
      },
      createTime: '2023-06-14 09:15',
      updateTime: '2023-06-14 10:30',
      views: 189,
      likes: 37,
      comments: [
        {
          id: 2001,
          content: '受力分析确实是解决力学问题的关键第一步，我建议大家在画图时一定要标清楚每个力的方向和大小，这样后续的计算才不容易出错。',
          author: {
            id: 105,
            name: '赵老师',
            avatar: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png'
          },
          createTime: '2023-06-14 11:20',
          likes: 15
        }
      ],
      tags: ['物理', '力学', '解题技巧']
    },
    3: {
      id: 3,
      title: '英语写作如何提高词汇多样性',
      content: '在英语写作中，我发现自己总是使用相同的词汇，导致文章显得单调。有没有什么好方法可以丰富词汇的使用呢？我尝试过使用同义词词典，但感觉有时候替换后的词语不太自然...',
      author: {
        id: 106,
        name: '陈同学',
        avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png'
      },
      createTime: '2023-06-13 16:40',
      updateTime: '2023-06-13 16:40',
      views: 210,
      likes: 28,
      comments: [
        {
          id: 3001,
          content: '我建议你多阅读英语原版文章，特别是那些写作风格你喜欢的作者的作品。在阅读过程中记录好的表达方式，然后在自己的写作中有意识地使用。',
          author: {
            id: 107,
            name: '吴老师',
            avatar: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png'
          },
          createTime: '2023-06-13 17:30',
          likes: 20
        },
        {
          id: 3002,
          content: '除了同义词词典，你也可以尝试使用一些写作辅助工具，比如Grammarly，它不仅能检查语法错误，还能提供更丰富的词汇建议。',
          author: {
            id: 108,
            name: '孙同学',
            avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png'
          },
          createTime: '2023-06-13 18:15',
          likes: 12
        }
      ],
      tags: ['英语', '写作', '词汇']
    }
  },
  
  // 问答数据
  questions: {
    1: {
      id: 1,
      title: '如何理解贝叶斯公式在实际问题中的应用？',
      content: '我在学习概率统计时，对贝叶斯公式的实际应用感到困惑。特别是在医学检测的例子中，为什么检测结果阳性但实际患病概率却很低？希望有人能详细解释一下。',
      author: {
        id: 109,
        name: '张同学',
        avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png'
      },
      createTime: '2023-06-12 10:20',
      views: 320,
      answers: [
        {
          id: 1001,
          content: '这涉及到贝叶斯公式的核心思想：先验概率和后验概率。在医学检测中，如果疾病本身的发病率很低（先验概率小），即使检测的准确率很高，阳性结果的患病概率（后验概率）也可能不高。\n\n举个例子：假设某病在人群中的发病率是0.1%（先验概率），检测的灵敏度是99%（真阳性率），特异度是95%（真阴性率）。当一个人检测结果为阳性时，根据贝叶斯公式计算，他真正患病的概率约为2%。这看起来很反直觉，但数学上是正确的。\n\n贝叶斯公式：P(A|B) = P(B|A) * P(A) / P(B)，其中P(A)是先验概率，P(A|B)是后验概率。',
          author: {
            id: 110,
            name: '王老师',
            avatar: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png'
          },
          createTime: '2023-06-12 11:15',
          accepted: true,
          votes: 45
        },
        {
          id: 1002,
          content: '补充一点，这种现象也被称为"基础比率谬误"(Base Rate Fallacy)，是人们在概率推理中常犯的错误。我们往往忽略了基础比率（即疾病的实际发病率），而过分关注检测的准确性。\n\n理解这一点对于正确解读医学检测结果非常重要，也是为什么医生在诊断时会结合多种因素，而不仅仅依赖单一检测结果。',
          author: {
            id: 111,
            name: '李同学',
            avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png'
          },
          createTime: '2023-06-12 13:40',
          accepted: false,
          votes: 28
        }
      ],
      tags: ['数学', '概率统计', '贝叶斯公式']
    },
    2: {
      id: 2,
      title: '牛顿第二定律与动量定理的关系是什么？',
      content: '在学习物理力学时，我发现牛顿第二定律和动量定理似乎在描述同一个物理现象，它们之间有什么联系和区别？哪个更基本？',
      author: {
        id: 112,
        name: '刘同学',
        avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png'
      },
      createTime: '2023-06-11 15:30',
      views: 275,
      answers: [
        {
          id: 2001,
          content: '牛顿第二定律和动量定理确实密切相关，但有不同的表述形式和适用场景。\n\n牛顿第二定律：F = ma，表示物体的加速度与所受的合外力成正比，与质量成反比。这是一个瞬时关系。\n\n动量定理：Ft = mv₂ - mv₁，表示冲量等于动量的变化量。这是一个时间积分关系。\n\n实际上，动量定理可以从牛顿第二定律推导出来：F = ma = m(dv/dt) = d(mv)/dt，两边对时间积分就得到动量定理。\n\n从基础性来说，牛顿第二定律更基本，是经典力学的基本定律之一。但在某些问题中，特别是涉及冲击力或时变力的问题，使用动量定理可能更方便。',
          author: {
            id: 113,
            name: '赵老师',
            avatar: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png'
          },
          createTime: '2023-06-11 16:45',
          accepted: true,
          votes: 38
        }
      ],
      tags: ['物理', '力学', '牛顿定律', '动量']
    }
  },
  
  // 学习笔记数据
  notes: {
    1: {
      id: 1,
      title: '高中数学必修三知识点总结',
      content: '# 概率与统计基础知识\n\n## 1. 随机事件与样本空间\n\n样本空间：随机试验的所有可能结果组成的集合，通常用S表示。\n随机事件：样本空间的子集。\n\n## 2. 概率的定义与性质\n\n概率的公理化定义：\n1) P(A) ≥ 0\n2) P(S) = 1\n3) 若A₁, A₂, ...互不相容，则P(A₁∪A₂∪...) = P(A₁) + P(A₂) + ...\n\n## 3. 条件概率与全概率公式\n\n条件概率：P(A|B) = P(A∩B) / P(B)，表示在B发生的条件下A发生的概率。\n\n全概率公式：若B₁, B₂, ..., Bₙ构成样本空间的一个划分，则对任意事件A有：\nP(A) = P(A|B₁)P(B₁) + P(A|B₂)P(B₂) + ... + P(A|Bₙ)P(Bₙ)\n\n## 4. 贝叶斯公式\n\nP(Bᵢ|A) = P(A|Bᵢ)P(Bᵢ) / P(A)\n\n## 5. 随机变量及其分布\n\n离散型随机变量的分布函数：F(x) = P(X ≤ x)\n连续型随机变量的密度函数：f(x) = F\'(x)\n\n## 6. 数学期望与方差\n\n期望：E(X) = ∑xᵢp(xᵢ) 或 E(X) = ∫x·f(x)dx\n方差：D(X) = E[(X-E(X))²] = E(X²) - [E(X)]²',
      author: {
        id: 114,
        name: '张同学',
        avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png'
      },
      createTime: '2023-06-10 09:30',
      updateTime: '2023-06-10 10:15',
      views: 420,
      likes: 65,
      comments: [
        {
          id: 1001,
          content: '这个笔记总结得很全面，特别是概率部分的公式整理得很清晰，对复习很有帮助！',
          author: {
            id: 115,
            name: '李同学',
            avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png'
          },
          createTime: '2023-06-10 11:20',
          likes: 8
        }
      ],
      tags: ['数学', '概率统计', '学习笔记']
    },
    2: {
      id: 2,
      title: '高中物理力学重点公式整理',
      content: '# 高中物理力学公式大全\n\n## 1. 运动学公式\n\n### 匀速直线运动\nx = x₀ + vt\n\n### 匀加速直线运动\nv = v₀ + at\nx = x₀ + v₀t + ½at²\nv² = v₀² + 2a(x - x₀)\n\n### 平抛运动\nx = v₀t\ny = ½gt²\n\n### 圆周运动\na_n = v²/r\nT = 2πr/v\nω = 2π/T\n\n## 2. 动力学公式\n\n### 牛顿运动定律\nF = ma\n\n### 万有引力定律\nF = Gm₁m₂/r²\n\n### 摩擦力\nF_摩 = μN\n\n## 3. 能量与功\n\n### 功\nW = Fs·cosθ\n\n### 动能\nE_k = ½mv²\n\n### 势能\nE_p = mgh（重力势能）\nE_p = ½kx²（弹性势能）\n\n### 功能关系\nW = ΔE_k\n\n## 4. 动量\n\n### 动量定理\nFt = mv - mv₀\n\n### 动量守恒\nm₁v₁ + m₂v₂ = m₁v₁\' + m₂v₂\'（碰撞前后）',
      author: {
        id: 116,
        name: '刘同学',
        avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png'
      },
      createTime: '2023-06-09 14:20',
      updateTime: '2023-06-09 15:30',
      views: 385,
      likes: 58,
      comments: [
        {
          id: 2001,
          content: '这些公式整理得很系统，建议在圆周运动部分补充一下角速度ω与线速度v的关系：v = ωr',
          author: {
            id: 117,
            name: '赵老师',
            avatar: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png'
          },
          createTime: '2023-06-09 16:15',
          likes: 12
        }
      ],
      tags: ['物理', '力学', '公式整理']
    }
  },
  
  // 当前查看的内容ID
  currentDiscussionId: null,
  currentQuestionId: null,
  currentNoteId: null,
  
  // 用户收藏的内容ID列表
  favoriteDiscussions: [1, 3],
  favoriteQuestions: [1],
  favoriteNotes: [2]
};

const mutations = {
  // 设置当前查看的讨论
  SET_CURRENT_DISCUSSION(state, id) {
    state.currentDiscussionId = id;
  },
  
  // 设置当前查看的问题
  SET_CURRENT_QUESTION(state, id) {
    state.currentQuestionId = id;
  },
  
  // 设置当前查看的笔记
  SET_CURRENT_NOTE(state, id) {
    state.currentNoteId = id;
  },
  
  // 添加讨论评论
  ADD_DISCUSSION_COMMENT(state, { discussionId, comment }) {
    if (state.discussions[discussionId]) {
      state.discussions[discussionId].comments.push(comment);
    }
  },
  
  // 添加问题回答
  ADD_QUESTION_ANSWER(state, { questionId, answer }) {
    if (state.questions[questionId]) {
      state.questions[questionId].answers.push(answer);
    }
  },
  
  // 添加笔记评论
  ADD_NOTE_COMMENT(state, { noteId, comment }) {
    if (state.notes[noteId]) {
      state.notes[noteId].comments.push(comment);
    }
  },
  
  // 收藏/取消收藏讨论
  TOGGLE_FAVORITE_DISCUSSION(state, id) {
    const index = state.favoriteDiscussions.indexOf(id);
    if (index === -1) {
      state.favoriteDiscussions.push(id);
    } else {
      state.favoriteDiscussions.splice(index, 1);
    }
  },
  
  // 收藏/取消收藏问题
  TOGGLE_FAVORITE_QUESTION(state, id) {
    const index = state.favoriteQuestions.indexOf(id);
    if (index === -1) {
      state.favoriteQuestions.push(id);
    } else {
      state.favoriteQuestions.splice(index, 1);
    }
  },
  
  // 收藏/取消收藏笔记
  TOGGLE_FAVORITE_NOTE(state, id) {
    const index = state.favoriteNotes.indexOf(id);
    if (index === -1) {
      state.favoriteNotes.push(id);
    } else {
      state.favoriteNotes.splice(index, 1);
    }
  }
};

const actions = {
  // 获取讨论详情
  getDiscussionDetail({ commit }, id) {
    commit('SET_CURRENT_DISCUSSION', id);
    return Promise.resolve();
  },
  
  // 获取问题详情
  getQuestionDetail({ commit }, id) {
    commit('SET_CURRENT_QUESTION', id);
    return Promise.resolve();
  },
  
  // 获取笔记详情
  getNoteDetail({ commit }, id) {
    commit('SET_CURRENT_NOTE', id);
    return Promise.resolve();
  },
  
  // 发表讨论评论
  addDiscussionComment({ commit }, { discussionId, content }) {
    // 模拟API调用
    const comment = {
      id: Date.now(),
      content,
      author: {
        id: 999, // 假设当前用户ID
        name: '当前用户',
        avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png'
      },
      createTime: new Date().toLocaleString(),
      likes: 0
    };
    
    commit('ADD_DISCUSSION_COMMENT', { discussionId, comment });
    return Promise.resolve(comment);
  },
  
  // 发表问题回答
  addQuestionAnswer({ commit }, { questionId, content }) {
    // 模拟API调用
    const answer = {
      id: Date.now(),
      content,
      author: {
        id: 999, // 假设当前用户ID
        name: '当前用户',
        avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png'
      },
      createTime: new Date().toLocaleString(),
      accepted: false,
      votes: 0
    };
    
    commit('ADD_QUESTION_ANSWER', { questionId, answer });
    return Promise.resolve(answer);
  },
  
  // 发表笔记评论
  addNoteComment({ commit }, { noteId, content }) {
    // 模拟API调用
    const comment = {
      id: Date.now(),
      content,
      author: {
        id: 999, // 假设当前用户ID
        name: '当前用户',
        avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png'
      },
      createTime: new Date().toLocaleString(),
      likes: 0
    };
    
    commit('ADD_NOTE_COMMENT', { noteId, comment });
    return Promise.resolve(comment);
  },
  
  // 收藏/取消收藏讨论
  toggleFavoriteDiscussion({ commit }, id) {
    commit('TOGGLE_FAVORITE_DISCUSSION', id);
    return Promise.resolve();
  },
  
  // 收藏/取消收藏问题
  toggleFavoriteQuestion({ commit }, id) {
    commit('TOGGLE_FAVORITE_QUESTION', id);
    return Promise.resolve();
  },
  
  // 收藏/取消收藏笔记
  toggleFavoriteNote({ commit }, id) {
    commit('TOGGLE_FAVORITE_NOTE', id);
    return Promise.resolve();
  }
};

const getters = {
  // 获取所有讨论列表
  allDiscussions: state => {
    return Object.values(state.discussions).sort((a, b) => new Date(b.createTime) - new Date(a.createTime));
  },
  
  // 获取所有问题列表
  allQuestions: state => {
    return Object.values(state.questions).sort((a, b) => new Date(b.createTime) - new Date(a.createTime));
  },
  
  // 获取所有笔记列表
  allNotes: state => {
    return Object.values(state.notes).sort((a, b) => new Date(b.createTime) - new Date(a.createTime));
  },
  
  // 获取当前讨论详情
  currentDiscussion: state => {
    return state.currentDiscussionId ? state.discussions[state.currentDiscussionId] : null;
  },
  
  // 获取当前问题详情
  currentQuestion: state => {
    return state.currentQuestionId ? state.questions[state.currentQuestionId] : null;
  },
  
  // 获取当前笔记详情
  currentNote: state => {
    return state.currentNoteId ? state.notes[state.currentNoteId] : null;
  },
  
  // 判断讨论是否已收藏
  isDiscussionFavorite: state => id => {
    return state.favoriteDiscussions.includes(Number(id));
  },
  
  // 判断问题是否已收藏
  isQuestionFavorite: state => id => {
    return state.favoriteQuestions.includes(Number(id));
  },
  
  // 判断笔记是否已收藏
  isNoteFavorite: state => id => {
    return state.favoriteNotes.includes(Number(id));
  }
};

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}; 